A data storage system can include several independent processors that cooperate to increase throughput of the many tasks associated with data storage and retrieval. These processors typically communicate with each other by leaving messages in a shared memory. This shared memory is constantly available to the processors for reading and writing.
Certain tasks performed by the processors require that each processor utilize a particular shared resource to the exclusion of the other processors. When a processor is using such a shared resource, it is important for the other processors to be informed that another processor is using the resource and that the resource is not currently available for use by the other processors.
Current systems that communicate the availability of a shared resource to the processors are software-based. As stated above, one approach to providing such communication is to enable the processors to leave messages in the shared memory. However, because the memory is shared, it is possible for a race condition between processors to occur. In such cases, one processor could inadvertently overwrite a message left by another processor. This can result in the two processors attempting to use the same shared resource at the same time.
Another approach involves requiring that a processor that is requesting access to the shared resource first check the resource to determine if it is available and then, if the resource is available, posting a claim to exclusive access to the resource. After a period of time, the processor then checks the resource to insure that it has gained access to the resource and that another processor did not gain access before the processor was able to post its claim to the resource. This process can require a significant amount of time for a processor to obtain exclusive access to the shared resource.